Pinning attacks
攻撃の概要
Attecker 1(A1) --> Victim(V) --> Attacker 2(A2) という LN 送金を想定する
このとき、A1 から Vへの送金を失敗させて A1 に satoshi を戻し、V から A2 への送金は成功させて A2 が satoshi を得る。これにより、Attacker(A1 and A2) は V から satoshi を盗むことができる。
これを実現するためには
A2 は、HTLC-success tx を使って、on-chain で satoshi を取得する
ただし、普通に行うと、V が preimage を知ることになる。V が preimage を使えば、A1 から satoshi を得ることができるので攻撃は失敗する
そのためには mempool を分断し、V の mempool に HTLC-success tx が入らないようにする。もちろん HTLC-success tx がマイニングされても preimage を V に知られることんなるので、HTLC-success tx をマイナーの mempool に止めておく。
mempool の分断は簡単ではない。この攻撃で一番難しいところで、実現は難しいとも言われている。
具体的には、マイニングされないように fee を低くし、RBF されないように child tx をたくさん繋げる。
mempool が分断されている場合 CPFP で success tx を timeout tx でリプレイスすることはできない
自分の所属するネットワークでは、そもそも親となる commitment も認識されていないため、今の relay policy では実現できない
たぶんこれを回避するのが Package Relay v3 なんだと思う
tx nVersion 3 と新しい package relay ポリシーで pinning attack は防ぐことができるらしい